﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using DataAccessComponents;
using System.Collections.ObjectModel;

namespace BusinessLogicLayer
{
    public class WyzywienieBL : IBusinessLogicLayer<Wyzywienie>
    {
        private DbOperations dal = new DbOperations();

        /// <summary>
        /// Funkcja dodająca
        /// </summary>
        /// <param name="objDodaj">Obiekt do dodania</param>
        /// <returns>Ideks dodanego wiersza</returns>
        public int dodaj(Wyzywienie objDodaj)
        {
            return dal.dodajWyzywienie(objDodaj);
        }

        /// <summary>
        /// Funkcja usuwająca
        /// </summary>
        /// <param name="idusun">Id obiektu do usuniecia</param>        
        public void usun(int idusun)
        {
            dal.usunWyzywienie(idusun);
        }

        /// <summary>
        /// Funkcja aktualizująca podany obiekt w bazie danych
        /// </summary>
        /// <param name="objAktualizuj">Obiekt zaktualizowany</param>
        public void aktualizuj(Wyzywienie objAktualizuj)
        {
            dal.aktualizujWyzywienie(objAktualizuj);
        }

        /// <summary>
        /// Funkcja zwracająca obiekt o podanym id
        /// </summary>
        /// <param name="idpobierz">Id obiektu do zwrocenia</param>
        /// <returns></returns>
        public Wyzywienie pobierz(int idpobierz)
        {
            return dal.pobierzWyzywienie(idpobierz);
        }

        /// <summary>
        /// Funkcja zwraca liste obiektów
        /// </summary>
        /// <returns>Lista obiektów</returns>
        public ObservableCollection<Wyzywienie> pobierzListe()
        {
            return dal.pobierzListeWyzywienie();
        }

        /// <summary>
        /// Funkcja aktualizująca obiekty w bazie obiektami z listy
        /// </summary>
        /// <param name="lista">Lista obiektow</param>
        /// <returns>True gdy operacja przebiegła poprawnie</returns>
        public bool aktualizujListe(ObservableCollection<Wyzywienie> lista)
        {
            foreach (Wyzywienie wyzywienie in lista)
            {
                if (wyzywienie.Id_wyzywienie == 0)
                {
                    this.dodaj(wyzywienie);
                }
                else
                {
                    this.aktualizuj(wyzywienie);
                }
            }
            return true;
        }

        /// <summary>
        /// Funkcja usuwa obiekt z bazy danych na podstawie obiektów z listy
        /// </summary>
        /// <param name="lista">Lista obiektów do usuniecia</param>
        /// <returns>True gdy operacja przebiegła poprawnie</returns>
        public bool usun(ObservableCollection<Wyzywienie> lista)
        {
            foreach (Wyzywienie wyzywienie in lista)
            {
                if (wyzywienie.Id_wyzywienie != 0)
                    this.usun(wyzywienie.Id_wyzywienie);
            }
            return true;            
        }
    }    
}
